package dominioTanque;

import java.util.ArrayList;
import java.util.List;

import api.Respuesta;
import api.ObjetoDominio;
import api.Suceso;

public class ObjetoBomba extends ObjetoDominio{
	public ObjetoBomba(Bomba elementoDominio,boolean observaCancelables) {
		super(elementoDominio);
		this.crearSucesosYRespuestas();
	}
	
	private void crearSucesosYRespuestas(){

		Suceso sucBombaPresionOk = new Suceso(Bomba.presionBombaOk);		
		Suceso sucTanqueVacio = new Suceso(Tanque.tanqueVacio);
		Suceso sucTanqueLleno = new Suceso(Tanque.tanqueLleno);
		
		List<Suceso> sucsTanqueVacio = new ArrayList<Suceso>();
		sucsTanqueVacio.add(sucBombaPresionOk);
		sucsTanqueVacio.add(sucTanqueVacio);		
		Respuesta respTanqueVacio = new Respuesta(Tanque.tanqueVacio,sucsTanqueVacio,false,true,false);
		this.agregarRespuesta(respTanqueVacio);
		
		List<Suceso> sucsTanqueLleno = new ArrayList<Suceso>();		
		sucsTanqueLleno.add(sucTanqueLleno);
		Respuesta respTanqueLleno = new Respuesta(Tanque.tanqueLleno,sucsTanqueLleno,false,true,false);
		this.agregarRespuesta(respTanqueLleno);
	}

	//Metodo privado para llamar cuando una respuesta recibida es una respuesta que el objeto sabe interpretar
	public void interpretarRespuesta(Respuesta respuesta) {		
		Bomba elemento = (Bomba)super.getElementoDominio();
		if (respuesta.getDescripcion().compareTo(Tanque.tanqueVacio) == 0) { 
			elemento.encender();			
		}
		else if (respuesta.getDescripcion().compareTo(Tanque.tanqueLleno) == 0){ 
			elemento.apagar();
			
		}
	}
	
	public void notificarMensaje(String mensaje) {		
		List<Suceso> sucCancelados = new ArrayList<Suceso>();
		if (mensaje.compareTo(Bomba.bombaApagada) == 0){
			String mensajeCancelado = Bomba.bombaEncendida;
			Suceso sucesoCancelado = new Suceso(mensajeCancelado);
			sucCancelados.add(sucesoCancelado);					
		}
		else if (mensaje.compareTo(Bomba.bombaEncendida) == 0){
			String mensajeCancelado = Bomba.bombaApagada;
			Suceso sucesoCancelado = new Suceso(mensajeCancelado);
			sucCancelados.add(sucesoCancelado);			
		}
		else if (mensaje.compareTo(Bomba.sinPresion) == 0){
			String mensajeCancelado = Bomba.bombaEncendida;
			Suceso sucesoCancelado = new Suceso(mensajeCancelado);			
			sucCancelados.add(sucesoCancelado);						
			mensajeCancelado = Bomba.presionBombaOk;
			sucesoCancelado = new Suceso(mensajeCancelado);			
			sucCancelados.add(sucesoCancelado);
		}
		else if (mensaje.compareTo(Bomba.presionBombaOk) == 0){			
			String mensajeCancelado = Bomba.sinPresion;
			Suceso sucesoCancelado = new Suceso(mensajeCancelado);			
			sucCancelados.add(sucesoCancelado);
		}
		String mensajeBomba = mensaje;
		Suceso suceso = new Suceso(mensajeBomba,sucCancelados);		
		enviarSuceso(suceso);
	}
}
